#ifndef _UC_SERIAL_H__
#define _UC_SERIAL_H__

#define USER_COM_QUEUE_SIZE (1524)
#define USER_COM_BUFF_SIZE (1064)
#define USER_COM_TIMEOUT (1000)

#define USER_COM_DEBUG_NAME "uart4"
#define DEBUG_CONFIG {                                \
    BAUD_RATE_460800,           /* 460800 bits/s */   \
    DATA_BITS_8,                /* 8 databits */      \
    STOP_BITS_1,                /* 1 stopbit */       \
    PARITY_NONE,                /* No parity  */      \
    BIT_ORDER_LSB,              /* LSB first sent */  \
    NRZ_NORMAL,                 /* Normal mode */     \
    RT_SERIAL_RB_BUFSZ,         /* Buffer size */     \
    RT_SERIAL_FLOWCONTROL_NONE, /* Off flowcontrol */ \
    0}

#define USER_COM_485_NAME "uart1"
#define RS485_CONFIG {                                \
    BAUD_RATE_9600,             /* 9600 bits/s */     \
    DATA_BITS_8,                /* 8 databits */      \
    STOP_BITS_1,                /* 1 stopbit */       \
    PARITY_NONE,                /* No parity  */      \
    BIT_ORDER_LSB,              /* LSB first sent */  \
    NRZ_NORMAL,                 /* Normal mode */     \
    RT_SERIAL_RB_BUFSZ,         /* Buffer size */     \
    RT_SERIAL_FLOWCONTROL_NONE, /* Off flowcontrol */ \
    0}

#define USER_COM_BT_NAME "uart7"
#define BT_CONFIG {                                   \
    BAUD_RATE_115200,           /* 115200 bits/s */   \
    DATA_BITS_8,                /* 8 databits */      \
    STOP_BITS_1,                /* 1 stopbit */       \
    PARITY_NONE,                /* No parity  */      \
    BIT_ORDER_LSB,              /* LSB first sent */  \
    NRZ_NORMAL,                 /* Normal mode */     \
    RT_SERIAL_RB_BUFSZ,         /* Buffer size */     \
    RT_SERIAL_FLOWCONTROL_NONE, /* Off flowcontrol */ \
    0}

#define USER_COM_UART_NAME "uart5"
#define UART_CONFIG {                                 \
    BAUD_RATE_115200,           /* 115200 bits/s */   \
    DATA_BITS_8,                /* 8 databits */      \
    STOP_BITS_1,                /* 1 stopbit */       \
    PARITY_NONE,                /* No parity  */      \
    BIT_ORDER_LSB,              /* LSB first sent */  \
    NRZ_NORMAL,                 /* Normal mode */     \
    RT_SERIAL_RB_BUFSZ,         /* Buffer size */     \
    RT_SERIAL_FLOWCONTROL_NONE, /* Off flowcontrol */ \
    0}

typedef enum
{
    UC_GB15322_HEAD = 0,
    UC_GB15322_TAIL,
} UC_UART_PASR_TYPE;

typedef enum
{
    UC_GB15322_ALLOW = 0,
    UC_GB15322_NO_ALLOW,
} E_GB15322_ALLOW;

/**
 * @brief  获取串口名字
 * @param  dest_module: 目的模块标识
 * @return 返回空为失败，其他字符串为成功
 */
char *get_serial_name(int module_id);

/**
 * @brief  获取串口发送消息队列
 *
 * @return 串口发送消息队列
 */
void *get_serial_queue(void);

/**
 * @brief  创建串口任务丢列
 * @param
 * @return 0:创建成功，其他：创建失败
 */
int serial_create_queue(void);

/**
 * @brief  串口task
 * @param
 * @return 0:创建成功，其他：创建失败
 */
void serial_app_task(void *parameter);

/**
 * @brief  串口发送接口
 * @param  dest_module: 目的模块标识
 *          data：待发送的数据
 *         len:待发送的数据长度
 * @return 0:发送数据为空或者数据长度小于1，其他：实际发送的数据长度
 */
int serial_write(int dest_module, unsigned char *data, unsigned int len);

/**
 * @brief  切换485串口波特率
 *
 * @param  baud_rate 波特率
 * @return int 0:成功，其他：失败
 */
int serial_app_485_baud_rate_set(unsigned int baud_rate);

#endif
